package collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/*
       迭代器的细节注意点：
           1.报错NoSuchElementException
           2.迭代器遍历完毕，指针不会复位
           3.循环中只能用一次next方法
           4.迭代器遍历时，不能用集合的方法进行增加或者删除
        暂时当做一个结论先行记忆，在今天我们会讲解源码详细的再来分析。
        如果我实在要删除：那么可以用迭代器提供的remove方法进行删除。
        如果我要添加，暂时没有办法。
      */
public class demo3 {
    public static void main(String[] args) {
        //1.创建集合并且添加元素
        Collection<String> coll = new ArrayList<>();
        coll.add("aaa");
        coll.add("bbb");
        coll.add("ccc");
        //2.获取迭代器对象
        //迭代器对象好比是一个指针,默认指向集合的0索引处
        Iterator<String> it = coll.iterator();
        //3.利用循环不断的去获取集合中的每一个元素
        while (it.hasNext()) {
            //4.next方法的二件事情:获取指针指向的元素并且移动指针
            String str = it.next();
            System.out.print(str);
        }
        System.out.println();
        //当上面循环结束之后，
        //迭代器的指针已经指向了最后没有元素的位置
        // System.out.println(it.next());//报错NoSuchElementException

        //迭代器遍历完毕，指针不会复位
        System.out.println(it.hasNext());//false

        //如果我们要继续第二次遍历集合，只能再次获取一个新的迭代器对象
        Iterator<String> it2 = coll.iterator();
        while (it2.hasNext()) {
            String str = it2.next();
            System.out.print(str);
            //4.迭代器遍历时，不能用集合的方法进行增加或者删除
            if ("aaa".equals(str)) {
                // coll.remove("aaa");//报错
                it2.remove();
            }


        }
        System.out.println();
        System.out.println(coll);//[bbb, ccc]

    }
}
